package br.com.ponto.model;

import java.io.Serializable;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;


/**
 * The persistent class for the empresa database table.
 * 
 */
@Entity
public class Empresa extends Controle implements Serializable {
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Integer idEmpresa;

	private String cnpj;

	@Column(name="dinicio_periodo")
	private Integer diaInicioPeriodo;

	private Double jornada;
	
	private Integer tolerancia;

	private String nome;
	
	private Boolean ativo;

	//bi-directional many-to-one association to Funcionario
	@OneToMany(mappedBy="empresa", fetch=FetchType.LAZY)
	private List<Funcionario> funcionarios;

    public Empresa() {
    	this.ativo = Boolean.TRUE;
    }

	public Integer getIdEmpresa() {
		return this.idEmpresa;
	}

	public void setIdEmpresa(Integer idEmpresa) {
		this.idEmpresa = idEmpresa;
	}

	public String getCnpj() {
		return this.cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public Integer getDiaInicioPeriodo() {
		return this.diaInicioPeriodo;
	}

	public void setDiaInicioPeriodo(Integer diaInicioPeriodo) {
		this.diaInicioPeriodo = diaInicioPeriodo;
	}

	public Double getJornada() {
		return this.jornada;
	}

	public void setJornada(Double jornada) {
		this.jornada = jornada;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public List<Funcionario> getFuncionarios() {
		return this.funcionarios;
	}

	public void setFuncionarios(List<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}
	
	public Integer getNroFuncionarios() {
		return this.funcionarios != null ? this.funcionarios.size() : 0;
	}
	
	public Integer getTolerancia() {
		return tolerancia;
	}

	public void setTolerancia(Integer tolerancia) {
		this.tolerancia = tolerancia;
	}
	
	public Boolean getAtivo() {
		return ativo;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public String getJornadaTrabalhoHHMM() {
		if(this.jornada != null) {
			Double jornada = this.jornada * 60; // jornada em minutos
			int horas = jornada.intValue()/60;
			int minutos = jornada.intValue() % 60;

			NumberFormat nf = new DecimalFormat("00");
			
			return nf.format(horas) + ":" + nf.format(minutos);
		}
		
		return null;
	}
}